package com.esisa.web.actions;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import org.apache.commons.io.FileUtils;
import org.hibernate.Hibernate;

import com.esisa.business.AuthentificationManager;
import com.esisa.business.FermierManager;
import com.esisa.business.VeterinaireManager;
import com.esisa.models.Compte;
import com.esisa.models.Fermier;
import com.esisa.models.Personne;
import com.esisa.models.Veterinaire;
import com.esisa.utils.BusinessFactory;
import com.opensymphony.xwork2.ActionSupport;
import com.sun.org.apache.regexp.internal.recompile;

public class ProfilAction extends ActionSupport {
	
	private Personne personne;
	private String login;
	private AuthentificationManager authentificationManager;
	private String pictureFileName;
	private String pictureContentType;
	private File picture;
	private FermierManager fermierManager;
	private VeterinaireManager veterinaireManager;
	private String password,confirmePassword;
	private String nom;
	private String prenom;
	private String email;
	private String telephone;
	private Date dateNaissance;
	
	public ProfilAction() {
		authentificationManager=BusinessFactory.getAuthentificationManager();
		veterinaireManager=BusinessFactory.getVeterinaireManager();
		fermierManager=BusinessFactory.getFermierManager();
	}
	public String updateInfos(){
		System.out.println("appel au mise a jour des infos personnel");
		injectPersonne();
		personne.setNom(nom);
		personne.setPrenom(prenom);
		personne.getCompte().setEmail(email);
		personne.setTelephone(telephone);
		personne.setDateNaissance(dateNaissance);
		updatePersonne(personne);
		addActionMessage(getText("parametres.saved"));
		return SUCCESS;
	}
	public String updatePassword(){
		System.out.println("appel au mise a jour de mot de passe");
		if(!password.equals(confirmePassword)){
			addActionError(getText("password.mismatch"));
			return ERROR;
		}
		injectPersonne();
		personne.getCompte().setPassword(password);
		updatePersonne(personne);
		addActionMessage(getText("parametres.saved"));
		return SUCCESS;
	}
	public String updatePicture(){
		System.out.println("appel au mise a jour de l image");
		if(this.pictureFileName!=null)
		{
			String repertoirePictureUser="D:/cours/tps/pfe/passeport-animalier/WebContent/images/profile";
	    	 try {
	    		 int i = pictureFileName.lastIndexOf('.');
	    		 String extension="";
	    		 if (i > 0) {
	    		     extension = pictureFileName.substring(i+1);
	    		 }
	    		pictureFileName=personne.getCompte().getLogin()+"."+extension;
	    		File destFile  = new File(repertoirePictureUser, pictureFileName);
				FileUtils.copyFile(picture, destFile);
				injectPersonne();
				personne.setPhoto("images/profile/"+pictureFileName);
				updatePersonne(personne);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    	 System.out.println("Succes Update");
			return SUCCESS;
		}
		return INPUT;
	}
	public Personne getPersonne() {
		return personne;
	}
	
	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}
	private void injectPersonne(){
		Compte compte=authentificationManager.findCompte(login);
		if(compte!=null){
			 Long id = compte.getPersonne().getId();
			if(compte.getGrade().equals("veterinaire")){
				personne=veterinaireManager.find(id);
			}
			if(compte.getGrade().equals("fermier")){
				personne=fermierManager.find(id);
			}
		}
	}
	private void updatePersonne(Personne personne){
		if(personne.getCompte().getGrade().equals("veterinaire")){
			Veterinaire veterinaire=(Veterinaire) personne;
			veterinaireManager.update(veterinaire);
		}
		if(personne.getCompte().getGrade().equals("fermier")){
			Fermier fermier=(Fermier) personne;
			fermierManager.update(fermier);
		}
	}
	
	@Override
	public String execute() throws Exception {
		injectPersonne();
		return super.execute();
	}
	public File getPicture() {
		return picture;
	}
	public void setPicture(File picture) {
		this.picture = picture;
	}
	public String getPictureFileName() {
		return personne.getPhoto();
	}
	public void setPictureFileName(String pictureFileName) {
		this.pictureFileName = "/passeport-animalier/"+pictureFileName;
	}
	public String getPictureContentType() {
		return pictureContentType;
	}
	public void setPictureContentType(String pictureContentType) {
		this.pictureContentType = pictureContentType;
	}
	
	public void setPassword(String password) {
		this.password = password;
		personne.getCompte().setPassword(password);
	}
	
	public void setNom(String nom) {
		this.nom = nom;
		personne.setNom(nom);
	}
	public void setPrenom(String prenom) {
		this.prenom = prenom;
		personne.setPrenom(prenom);
	}
	public void setEmail(String email) {
		this.email = email;
		personne.getCompte().setEmail(email);
	}
	public void setTelephone(String telephone) {
		this.telephone = telephone;
		personne.setTelephone(telephone);
	}
	public void setDateNaissance(Date dateNaissance) {
		this.dateNaissance = dateNaissance;
		personne.setDateNaissance(dateNaissance);
	}
	public void setConfirmePassword(String confirmePassword) {
		this.confirmePassword = confirmePassword;
	}
	public String getPassword() {
		if(personne!=null)
		return personne.getCompte().getPassword();
		return password;
	}
	public String getNom() {
		if(personne!=null)
		return personne.getNom();
		return nom;
	}
	public String getPrenom() {
		if(personne!=null)
		return personne.getPrenom();
		return prenom;
	}
	public String getEmail() {
		if(personne!=null)
		return personne.getCompte().getEmail();
		return email;
	}
	public String getTelephone() {
		if(personne!=null)
		return personne.getTelephone();
		return telephone;
	}
	public Date getDateNaissance() {
		if(personne!=null)
		return personne.getDateNaissance();
		return dateNaissance;
	}
	
	
	
}
